package org.gd.hellojavacore.patterns;

/**
 <pre>

 В разработке программного обеспечения, шаблон проектирования или паттерн (англ. design pattern)
 — повторимая архитектурная конструкция, представляющая собой решение проблемы проектирования
 в рамках некоторого часто возникающего контекста.

 Обычно шаблон не является законченным образцом, который может быть прямо преобразован в код;
 это лишь пример решения задачи, который можно использовать в различных ситуациях.
 Объектно-ориентированные шаблоны показывают отношения и взаимодействия между классами или объектами,
 без определения того, какие конечные классы или объекты приложения будут использоваться.

 «Низкоуровневые» шаблоны, учитывающие специфику конкретного языка программирования, называются идиомами.
 Это хорошие решения проектирования, характерные для конкретного языка или программной платформы,
 и потому не универсальные.

 На наивысшем уровне существуют архитектурные шаблоны, они охватывают собой архитектуру
 всей программной системы.

 Алгоритмы по своей сути также являются шаблонами, но не проектирования, а вычисления,
 так как решают вычислительные задачи.

 ----------------------------------------------------------------------------------------------

 История

 В 1970-е годы архитектор Кристофер Александр составил набор шаблонов проектирования.
 В области архитектуры эта идея не получила такого развития, как позже в области программной разработки.

 В 1987 году Кент Бэк (Kent Beck) и Вард Каннингем (Ward Cunningham) взяли идеи Александра
 и разработали шаблоны применительно к разработке программного обеспечения для разработки
 графических оболочек на языке Smalltalk.

 В 1988 году Эрих Гамма (Erich Gamma) начал писать докторскую диссертацию при цюрихском
 университете об общей переносимости этой методики на разработку программ.

 В 1989—1991 годах Джеймс Коплин (James Coplien) трудился над разработкой идиом для
 программирования на C++ и опубликовал в 1991 году книгу Advanced C++ Idioms.

 В этом же году Эрих Гамма заканчивает свою докторскую диссертацию и переезжает в США,
 где в сотрудничестве с Ричардом Хелмом (Richard Helm), Ральфом Джонсоном (Ralph Johnson) и
 Джоном Влиссидсом (John Vlissides) публикует книгу Design Patterns — Elements of Reusable Object-Oriented Software.
 В этой книге описаны 23 шаблона проектирования. Также команда авторов этой книги известна общественности
 под названием «Банда четырёх» (англ. Gang of Four, часто сокращается до GoF).
 Именно эта книга стала причиной роста популярности шаблонов проектирования.

 ----------------------------------------------------------------------------------------------

 Польза

 Главная польза каждого отдельного шаблона состоит в том, что он описывает решение целого
 класса абстрактных проблем. Также тот факт, что каждый шаблон имеет свое имя, облегчает
 дискуссию об абстрактных структурах данных (ADT) между разработчиками, так как они могут
 ссылаться на известные шаблоны. Таким образом, за счёт шаблонов производится унификация терминологии,
 названий модулей и элементов проекта.

 Правильно сформулированный шаблон проектирования позволяет, отыскав удачное решение,
 пользоваться им снова и снова.

 ----------------------------------------------------------------------------------------------

 Критика

 Иногда шаблоны консервируют громоздкую и малоэффективную систему понятий, разработанную узкой группой.
 Когда количество шаблонов возрастает, превышая критическую сложность, исполнители начинают игнорировать
 шаблоны и всю систему, с ними связанную. Нередко шаблонами заменяется отсутствие или недостаточность
 документации в сложной программной среде.

 Есть мнение, что слепое применение шаблонов из справочника, без осмысления причин и предпосылок
 выделения каждого отдельного шаблона, замедляет профессиональный рост программиста,
 так как подменяет творческую работу механической подстановкой шаблонов. Люди, придерживающиеся
 данного мнения, считают, что знакомиться со списками шаблонов необходимо тогда,
 когда программист «дорос» до них в профессиональном плане — и не раньше.
 Хороший критерий нужной степени профессионализма — выделение шаблонов самостоятельно,
 на основании собственного опыта. При этом, разумеется, знакомство с теорией, связанной с шаблонами,
 полезно на любом уровне профессионализма и направляет развитие программиста в правильную сторону.
 Сомнению подвергается только использование шаблонов «по справочнику».

 Шаблоны могут пропагандировать плохие стили разработки приложений, и зачастую слепо применяются.
 Для преодоления этих недостатков используется рефакторинг.

 </pre>
 */
public interface Pattern {
}
